package com.itheima.aspect;


import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

@Component //IOC配置 将当前bean加载到ioc容器中
@Aspect  // AOP配置 声明当前类为切面类
public class MyAspect {


    //切点
    @Pointcut("execution( * com.itheima.service.impl.AccountServiceImpl.find*(..))")
    public void qieDian(){

    }

    // 通知
    @Around("qieDian()")
    public Object  around(ProceedingJoinPoint pjp){ //参数  ProceedingJoinPoint 切入点的封装对象
        Object result=null;
        try {
           // System.out.println("前置通知:11111111111111111");
            long startTime = System.currentTimeMillis();
            for (int i = 0; i < 10000; i++) {
                result = pjp.proceed();
            }
           // System.out.println("后置通知:2222222222222222");
            long endTime = System.currentTimeMillis();

            System.out.println("find开头的方法执行一万次"+(endTime-startTime)+"毫秒");

        } catch (Throwable throwable) {
           // System.out.println("异常通知:3333333333333333333");
        } finally {
            //System.out.println("最终通知:44444444444444444444444");
        }

        return result;
    }


//    @Before("qieDian()")
//    public void before(){
//        System.out.println("前置通知:11111111111111111");
//    }
//
//    @AfterReturning("qieDian()")
//    public void afterReturning(){
//        System.out.println("后置通知:2222222222222222");
//    }
//
//    @AfterThrowing("qieDian()")
//    public void afterThrowing(){
//        System.out.println("异常通知:3333333333333333333");
//    }
//
//    @After("qieDian()")
//    public void after(){
//        System.out.println("最终通知:44444444444444444444444");
//    }


}
